﻿using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HRP.Utilidades;

namespace HRP.Private.Funcionarios.Controlos
{
    public partial class Criar_Contrato : CriarControlo
    {
        public string moeda
        {
            get
            {
                if (Session["EmpresaActual"] != null)
                {
                    hrp_empresas empresaActual = (hrp_empresas)Session["EmpresaActual"];
                    return utilidades.ObterMoedaEmpresa(empresaActual.id);
                }
                Response.Redirect("/private/logout.aspx");
                return string.Empty;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        public override bool Valida()
        {
            return Page.IsValid;
        }

        private string DefaultValue(string valor)
        {
            return string.IsNullOrEmpty(valor) ? "0" : valor;
        }

        public override void Gravar(int funcionarioId)
        {
            if (Session["EmpresaActual"] != null && Session["idclient"] != null && Session["userid"] != null)
            {
                int url_contrato = 0;// utilidades.DefinicoesSite.PastaDocumentosMediaNoID;
                string numerouser = Session["userid"].ToString();
                DateTime dataFim = string.IsNullOrEmpty(dataFimContratoTb.Text.Trim()) ? DefinicoesSite.DataFimAbsurda: Convert.ToDateTime(dataFimContratoTb.Text.Trim());
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                int clientID = (int)Session["idclient"];
                hrp_funcionario funcionario = Funcionario_BLL.Instance.ObterFuncionarioPorId(clientID, empresa.id, funcionarioId);

                hrp_contratos contrato = Salario_BLL.Instance.CriarNovoContrato(clientID, empresa.id, funcionarioId,
                     Convert.ToDateTime(dataInicioContratoTb.Text.Trim()), dataFim, url_contrato, numerouser, Request.UserHostAddress);

                Salario_BLL.Instance.CriarNovoSalario(clientID, empresa.id, funcionarioId, contrato.id, Convert.ToDecimal(salarioBaseTb.Text.Trim()), funcionario.pais_iso.Value, moeda, funcionario.pais, numerouser, Request.UserHostAddress,
                    Convert.ToDecimal(DefaultValue(subsAlimentacaoTb.Text)), Convert.ToDecimal(DefaultValue(subsProdutividadeTb.Text)), Convert.ToDecimal(DefaultValue(subsDesempenhoTb.Text)), Convert.ToDecimal(DefaultValue(subsAssiduidadeTb.Text)), Convert.ToDecimal(DefaultValue(subsTransporteTb.Text)),
                    Convert.ToDecimal(DefaultValue(subsTurnoTb.Text)), Convert.ToDecimal(DefaultValue(abonoActualTb.Text)), Convert.ToDecimal(DefaultValue(abonoFamiliaTb.Text)), Convert.ToDecimal(DefaultValue(subsChefiaTb.Text)), Convert.ToDecimal(DefaultValue(subs10Tb.Text)),
                    Convert.ToDecimal(DefaultValue(subs5ExpTb.Text)), Convert.ToDecimal(DefaultValue(subs5ContagioTb.Text)), Convert.ToDecimal(DefaultValue(subs3CompTb.Text)), Convert.ToDecimal(DefaultValue(sindicatoTb.Text)),
                    Convert.ToDecimal(DefaultValue(subsNatal.Text)), Convert.ToDecimal(DefaultValue(subsFerias.Text)));


                ActualizarEventos(funcionarioId, Convert.ToDateTime(dataInicioContratoTb.Text.Trim()), dataFim, 
                    funcionario.nome, clientID, empresa.id, numerouser);

            }
        }

        private void ActualizarEventos(int funcionarioId, DateTime inicio, DateTime fim, string nomeFunc, int clientId, int empresaId, string numerouser)
        {
            List<hrp_eventos_detalhe> listEventos = Evento_BLL.Instance.ObterEventosFuncionario(funcionarioId, 0);
            DateTime dataActual = DateTime.Now;
            foreach (hrp_eventos_detalhe evento in listEventos)
            {
                if (evento.tipo_evento == DefinicoesSite.EventoInicioContratoID || evento.tipo_evento == DefinicoesSite.EventoFimContratoID)
                {
                    Evento_BLL.Instance.ApagarEvento(evento.id, numerouser, Request.UserHostAddress, dataActual);
                }
            }
            Evento_BLL.Instance.AdicionarNovoEvento(nomeFunc + "-Inicio do Contrato", inicio, inicio,
                DefinicoesSite.EventoInicioContratoID, numerouser, dataActual, Request.UserHostAddress, true,
                clientId, empresaId, funcionarioId, string.Empty);
            Evento_BLL.Instance.AdicionarNovoEvento(nomeFunc + "-Fim do Contrato", fim, fim,
                DefinicoesSite.EventoInicioContratoID, numerouser, dataActual, Request.UserHostAddress, true,
                clientId, empresaId, funcionarioId, string.Empty);
        }
    }
}